2.08. Файерволлы
Файерволлы
От чего защищает файерволл и зачем он нужен
Файерволл обеспечивает защиту информационных систем от несанкционированного доступа, вредоносного сетевого трафика и попыток эксплуатации уязвимостей. Он служит первым рубежом обороны в архитектуре сетевой безопасности. Основная задача — контроль входящего и исходящего трафика на основе заранее определённых правил.
Файерволл предотвращает проникновение вредоносных программ, сканирование портов, атаки типа «отказ в обслуживании» (DoS), а также блокирует соединения с известными вредоносными IP-адресами или доменами. Он ограничивает возможности внутренних приложений устанавливать нежелательные внешние соединения, что снижает риски утечки данных или участия устройства в ботнетах.
Наличие файерволла особенно важно в условиях постоянной активности автоматизированных сканеров и ботов в интернете, которые постоянно ищут уязвимые системы для эксплуатации. Без файерволла каждое устройство в сети потенциально доступно для любого участника глобальной сети, что создаёт высокий уровень риска.
Что такое пакет данных
Пакет данных — это минимальная единица передачи информации в сетях, использующих протоколы семейства TCP/IP. При отправке данных по сети они разбиваются на фрагменты, каждый из которых упаковывается в пакет. Каждый пакет содержит:
- Заголовок — служебную информацию: IP-адрес отправителя, IP-адрес получателя, номер порта источника, номер порта назначения, тип протокола (TCP, UDP, ICMP и другие), флаги управления, контрольную сумму.
- Полезную нагрузку — часть исходных данных, предназначенных для передачи.
- Концевик — дополнительные служебные данные, такие как CRC-контрольная сумма для проверки целостности.
Пакеты могут следовать по сети разными маршрутами и приходить в произвольном порядке. Получатель собирает их обратно в исходное сообщение с помощью информации из заголовков. Файерволлы анализируют содержимое заголовков пакетов, чтобы принимать решения о разрешении или блокировке трафика.
Пример структуры IP-пакета (упрощённо):
+-------------------------+
| Версия IP (4 или 6) |
| Длина заголовка |
| Тип сервиса |
| Общая длина пакета |
| Идентификатор |
| Флаги и смещение фрагмента|
| Время жизни (TTL) |
| Протокол |
| Контрольная сумма |
| IP-адрес источника |
| IP-адрес назначения |
+-------------------------+
| Порт источника (TCP/UDP)|
| Порт назначения |
| Номер последовательности|
| Подтверждение |
| Флаги (SYN, ACK и др.) |
+-------------------------+
| Полезная нагрузка |
+-------------------------+
Файерволл может работать на разных уровнях модели OSI, но чаще всего анализирует пакеты на сетевом (L3) и транспортном (L4) уровнях.
Как работают правила
Правила файерволла — это набор инструкций, определяющих, как обрабатывать сетевой трафик. Каждое правило состоит из условий и действия. Условия описывают характеристики трафика: IP-адреса, порты, протоколы, направление (входящий/исходящий), интерфейс, состояние соединения. Действие указывает, что делать с трафиком, соответствующим условиям: разрешить, запретить, перенаправить, залогировать.
Правила применяются последовательно, сверху вниз. При первом совпадении с трафиком выполняется соответствующее действие, и дальнейшая проверка прекращается. Это означает, что порядок правил имеет значение. Более специфичные правила должны располагаться выше общих.
Пример правила в формате iptables (Linux):
# Разрешить входящие соединения на порт 80 (HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Это правило:
- Применяется к цепочке
INPUT(входящий трафик). - Работает с протоколом
tcp. - Проверяет, что порт назначения (
--dport) равен80. - Если всё совпадает — действие
ACCEPT(разрешить).
Другой пример — блокировка всех входящих соединений с конкретного IP:
iptables -A INPUT -s 192.168.5.100 -j DROP
Здесь:
-sуказывает источник (source).DROPозначает полное игнорирование пакета без отправки ответа.
Правила могут быть временными (до перезагрузки) или постоянными (сохраняются в конфигурационных файлах). Эффективность правил зависит от их точности, полноты и логической согласованности.
Что такое фильтрация
Фильтрация — это процесс анализа сетевого трафика и принятия решений о его пропуске или блокировке на основе заданных критериев. Фильтрация реализуется через правила, описанные выше, и может происходить на разных уровнях детализации.
Существует несколько типов фильтрации:
- Фильтрация по IP-адресу — разрешение или запрет трафика от/к определённым IP-адресам или подсетям. Например, разрешить доступ только с корпоративной сети
10.0.0.0/8. - Фильтрация по порту — контроль доступа к конкретным сетевым службам. Например, закрыть порт 22 (SSH) для всех, кроме администраторов.
- Фильтрация по протоколу — ограничение использования определённых протоколов (например, запрет ICMP для предотвращения ping-сканирования).
- Государственная (stateful) фильтрация — анализ не только отдельных пакетов, но и состояния всего соединения. Такой файерволл отслеживает, является ли пакет частью уже установленного легитимного соединения (например, ответ на запрос). Это позволяет блокировать случайные или поддельные пакеты, не относящиеся к реальным сессиям.
- Контекстная фильтрация — более глубокий анализ, включающий содержимое прикладного уровня (L7). Например, блокировка HTTP-запросов, содержащих SQL-инъекции.
Фильтрация снижает поверхность атаки, минимизируя количество открытых и доступных сервисов. Она также помогает соблюдать принцип минимальных привилегий: система получает доступ только к тем ресурсам, которые ей действительно необходимы.
Как работает блокировка и разрешение
Блокировка и разрешение — это два основных действия, которые может выполнять файерволл в ответ на сетевой трафик.
Разрешение означает, что пакет пропускается дальше по сети. Это происходит, когда трафик соответствует одному из разрешающих правил. Разрешённый трафик может быть как входящим (например, запрос к веб-серверу), так и исходящим (например, обновление программного обеспечения).
Блокировка может реализовываться двумя способами:
- DROP — пакет молча отбрасывается. Отправитель не получает никакого уведомления. Это повышает безопасность, так как злоумышленник не узнаёт, существует ли целевой хост или просто закрыт порт.
- REJECT — отправляется сообщение об ошибке (например, ICMP-сообщение «порт недоступен» или TCP RST-пакет). Это удобнее для диагностики легитимных проблем, но даёт информацию потенциальному атакующему.
Выбор между DROP и REJECT зависит от политики безопасности. В публичных сервисах часто используется REJECT для удобства пользователей, а во внутренних сетях — DROP для маскировки инфраструктуры.
Пример конфигурации в nftables (современная замена iptables):
table inet filter {
chain input {
type filter hook input priority 0;
# Разрешить установленные соединения
ct state established,related accept
# Разрешить локальный трафик
iif "lo" accept
# Разрешить SSH
tcp dport 22 accept
# Блокировать всё остальное без уведомления
drop
}
}
Эта конфигурация:
- Сначала пропускает уже установленные соединения.
- Затем разрешает весь трафик на loopback-интерфейсе.
- После этого открывает порт 22 для SSH.
- Всё остальное — отбрасывается.
Такой подход («разрешить явно, всё остальное — запретить») считается наиболее безопасным.
Программный файерволл
Программный файерволл — это приложение или компонент операционной системы, реализующий функции межсетевого экрана на уровне хоста. Он работает внутри самой операционной системы и контролирует весь сетевой трафик, проходящий через сетевые интерфейсы этого устройства.
Преимущества программного файерволла:
- Гибкость настройки под конкретное приложение или пользователя.
- Возможность контроля исходящего трафика на уровне процессов.
- Интеграция с другими компонентами ОС (например, с антивирусом).
- Низкая стоимость — часто входит в состав ОС.
Недостатки:
- Зависит от состояния операционной системы. Если ОС скомпрометирована, файерволл может быть отключён или обойдён.
- Потребляет ресурсы CPU и памяти хоста.
- Требует настройки на каждом устройстве отдельно.
Примеры программных файерволлов:
- Windows Defender Firewall — встроен в Windows.
- ufw (Uncomplicated Firewall) — упрощённый интерфейс к iptables в Linux.
- pf — мощный файерволл в OpenBSD, также доступен в macOS и FreeBSD.
- Firewalld — динамический менеджер фаерволла в современных дистрибутивах Linux (RHEL, Fedora, CentOS).
Пример команды в ufw:
# Разрешить порт 443 (HTTPS)
sudo ufw allow 443/tcp
Программный файерволл особенно полезен на конечных устройствах (ноутбуках, рабочих станциях), где важно контролировать, какие приложения могут выходить в интернет.
Аппаратный файерволл
Аппаратный файерволл — это специализированное сетевое устройство, предназначенное исключительно для выполнения функций межсетевого экрана. Он размещается на границе между внутренней сетью и внешним миром (например, между локальной сетью и интернетом).
Особенности аппаратного файерволла:
- Выполняет фильтрацию на выделенном оборудовании с оптимизированной прошивкой.
- Обеспечивает высокую производительность и низкую задержку.
- Часто включает дополнительные функции: VPN, IDS/IPS, фильтрацию контента, QoS.
- Управляется централизованно, что упрощает администрирование крупных сетей.
- Не зависит от состояния конечных хостов.
Примеры аппаратных решений:
- Cisco ASA / Firepower
- Palo Alto Networks PA-Series
- Fortinet FortiGate
- Juniper SRX
Аппаратные файерволлы используются в корпоративных сетях, дата-центрах и провайдерских инфраструктурах. Они обеспечивают защиту всей сети сразу, а не по отдельным узлам.
Конфигурация аппаратного файерволла обычно выполняется через веб-интерфейс, CLI или API. Пример правила в Cisco ASA:
access-list OUTSIDE_IN extended permit tcp any host 203.0.113.10 eq 80
access-group OUTSIDE_IN in interface outside
Это правило разрешает любой входящий TCP-трафик на порт 80 хоста 203.0.113.10.
Аппаратные файерволлы часто поддерживают отказоустойчивость (HA-пары), глубокую инспекцию пакетов (DPI) и интеграцию с системами управления безопасностью (SIEM).
Брандмауэр Windows
Брандмауэр Windows — это встроенный компонент операционной системы Microsoft Windows, предназначенный для контроля входящего и исходящего сетевого трафика на уровне хоста. Он доступен во всех современных версиях Windows, начиная с Windows XP SP2, и активирован по умолчанию.
Брандмауэр Windows работает на основе профилей сети:
- Домашняя сеть — применяется, когда компьютер подключён к доверенной локальной сети.
- Частная сеть — используется в корпоративных или учебных сетях, где требуется баланс между безопасностью и функциональностью.
- Публичная сеть — самый строгий профиль, применяемый при подключении к общественным Wi-Fi (кафе, аэропорты), где по умолчанию блокируются почти все входящие соединения.
Каждое правило может быть привязано к одному или нескольким профилям. Это позволяет гибко настраивать поведение в зависимости от контекста подключения.
Правила в брандмауэре Windows делятся на два типа:
- Правила для программ — разрешают или запрещают конкретному исполняемому файлу (например,
chrome.exe) создавать сетевые соединения. - Правила для портов — управляют трафиком по протоколам и номерам портов (например, разрешить TCP-порт 3389 для удалённого рабочего стола).
Пример создания правила через PowerShell:
# Разрешить входящие соединения на порт 8080 (TCP)
New-NetFirewallRule -DisplayName "Разрешить HTTP-альтернативу" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8080 `
-Action Allow
Это правило:
- Имеет понятное имя (
DisplayName). - Применяется ко входящему трафику (
Inbound). - Работает только с протоколом TCP.
- Слушает локальный порт 8080.
- Выполняет действие
Allow.
Брандмауэр Windows также поддерживает расширенные функции:
- Фильтрацию по IP-адресам источника и назначения.
- Управление правилами групповой политикой (GPO) в доменах Active Directory.
- Интеграцию с IPsec для шифрования и аутентификации трафика.
- Ведение журналов событий (по умолчанию отключено, но может быть включено вручную).
Журналы записываются в файл %systemroot%\System32\LogFiles\Firewall\pfirewall.log и содержат информацию о заблокированных и разрешённых пакетах, включая временные метки, IP-адреса, порты и протоколы.
Как настроить брандмауэр
Настройка файерволла зависит от используемой операционной системы или устройства. В общем случае процесс включает определение требуемых сетевых служб, создание правил для их работы и блокировку всего остального.
В Linux с использованием ufw (Uncomplicated Firewall):
# Включить файерволл
sudo ufw enable
# Разрешить SSH
sudo ufw allow OpenSSH
# Разрешить HTTP и HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Запретить всё остальное по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing
В Windows через графический интерфейс:
- Открыть «Панель управления» → «Система и безопасность» → «Брандмауэр Защитника Windows».
- Выбрать «Дополнительные параметры».
- В разделе «Правила для входящих подключений» нажать «Создать правило».
- Указать тип правила (программа, порт, предопределённое).
- Выбрать действие (разрешить, разрешить с защитой, запретить).
- Назначить профили сети.
- Указать имя правила.
В macOS используется встроенный файерволл pf, управляемый через pfctl или графический интерфейс:
- Системные настройки → «Сеть» → «Брандмауэр».
- Можно включить базовую фильтрацию приложений.
- Для продвинутой настройки редактируется файл
/etc/pf.conf.
На маршрутизаторах (например, на базе OpenWrt) правила задаются через веб-интерфейс LuCI или напрямую в конфигурационных файлах iptables/nftables.
Общие принципы настройки:
- Начинать с политики «запретить всё, разрешить явно».
- Минимизировать количество открытых портов.
- Ограничивать доступ по IP-адресам, где возможно.
- Регулярно проверять и чистить устаревшие правила.
Как настроить исключения
Исключения — это правила, которые временно или постоянно отменяют действие основной политики файерволла для конкретных приложений, портов или адресов.
В Windows исключение можно добавить так:
- Через PowerShell:
# Разрешить конкретную программу
New-NetFirewallRule -DisplayName "Моя программа" `
-Program "C:\MyApp\app.exe" `
-Direction Outbound `
-Action Allow - Через графический интерфейс: при создании правила выбрать «Программа» → указать путь к
.exe.
В Linux с iptables:
# Разрешить исходящие соединения к DNS-серверу Google
iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT
В nftables:
table inet filter {
chain output {
ip daddr 8.8.8.8 udp dport 53 accept
}
}
Важно помнить:
- Исключения увеличивают поверхность атаки.
- Каждое исключение должно быть обосновано бизнес- или технической необходимостью.
- Исключения для целых подсетей (
0.0.0.0/0) считаются плохой практикой. - Лучше использовать временные исключения с автоматическим удалением (например, через cron или задачи планировщика).
Некоторые файерволлы поддерживают «динамические» исключения — например, при первом запуске программы пользователю предлагается разрешить или запретить сетевой доступ. Такой подход удобен для конечных пользователей, но не рекомендуется на серверах.
Как понять, что у программы, сервера или приложения проблемы именно из-за файервола
Диагностика проблем, связанных с файерволлом, начинается с наблюдения за симптомами:
- Приложение не может подключиться к внешнему сервису (например, не загружает данные из интернета).
- Сервер принимает локальные запросы (
localhost), но недоступен извне. - Соединение зависает без ошибки или завершается с тайм-аутом.
- Появляются сообщения вида «Connection refused» (если используется
REJECT) или полное отсутствие ответа (если используетсяDROP).
Методы диагностики:
1. Проверка локальной доступности
Запустить сервер и попробовать подключиться к нему с того же хоста:
curl http://localhost:8080
Если работает — проблема во внешнем доступе, вероятно, в файерволле.
2. Проверка состояния порта с другого устройства
Использовать telnet, nc (netcat) или Test-NetConnection (PowerShell):
Test-NetConnection example.com -Port 8080
Если соединение не устанавливается, а сервер точно запущен — скорее всего, порт закрыт файерволлом.
3. Анализ журналов файерволла
Включить логирование и найти записи о блокировке:
- В Windows: просмотреть
pfirewall.log. - В Linux: проверить
/var/log/kern.logили настроить отдельный лог дляiptables:iptables -A INPUT -j LOG --log-prefix "BLOCKED: "
4. Временное отключение файерволла
(Только в тестовой среде!)
- Windows:
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False - Linux:
sudo ufw disable
# или
sudo iptables -P INPUT ACCEPT && sudo iptables -F
Если после отключения проблема исчезает — причина точно в правилах файерволла.
5. Проверка правил
Убедиться, что правило существует и активно:
- Windows:
Get-NetFirewallRule -DisplayName "Моё правило" - Linux:
sudo iptables -L -n -v
# или
sudo nft list ruleset
Типичные ошибки:
- Правило создано для неправильного профиля сети (например, только для «частной», а подключение публичное).
- Указан неверный протокол (TCP вместо UDP или наоборот).
- Порт указан как «локальный», хотя нужно разрешить «удалённый» (или наоборот).
- Правило находится ниже более общего правила с действием
DROP.
Когда диагноз подтверждён, создаётся точное правило, разрешающее нужный трафик, и файерволл возвращается в рабочее состояние.